﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Shop.Data;
using Shop.Resources;

namespace Shop.AllForms
{
    public partial class EditProduct : Form
    {
        public EditProduct()
        {
            InitializeComponent();
            groupBoxEdit.Enabled = false;
        }

        private void buttonShowInfo_Click(object sender, EventArgs e)
        {
            string barcode = textBoxEnterBarcode.Text;
            ShopItem editShopItem = ShopData.FindItemByBarcode(barcode);
            if (editShopItem == null)
            {
                MessageBox.Show("Продукт с този баркод несъществува!");
                return;
            }
            else
            {
                groupBoxEdit.Enabled = true;
                comboBoxType.SelectedIndex = editShopItem.TypeNumber;
                textBoxBarcode.Text = editShopItem.Barcode;
                textBoxSpecification.Text = editShopItem.Specification;
                expDateTimePicker.Value = editShopItem.ExpDate;
                textBoxPrice.Text = editShopItem.Price.ToString();
                if (editShopItem.TypeNumber < 2)
                {
                    textBoxWeight.Text = editShopItem.Weight.ToString();
                    textBoxQuantity.Enabled = false;
                    textBoxWeight.Enabled = true;
                }
                else
                {
                    textBoxQuantity.Text = editShopItem.Quantity.ToString();
                    textBoxWeight.Enabled = false;
                    textBoxQuantity.Enabled = true;
                }
            }
        }

        private void EditButton_Click(object sender, EventArgs e)
        {
            if (comboBoxType.SelectedIndex == -1)
            {
                MessageBox.Show("Трябва да изберете тип на продукта!");
                return;
            }
            string type = comboBoxType.SelectedItem.ToString();

            string newBarcode = textBoxBarcode.Text;
            if (newBarcode.Length == 0)
            {
                MessageBox.Show("Въведете баркод!");
                return;
            }
            if (!newBarcode.ContainsOnlyNumbers())
            {
                MessageBox.Show("Въведеният баркод трябва да съдържа само цифри!");
                return;
            }
            if (newBarcode.Length < 13)
            {
                MessageBox.Show("Въведеният баркод трябва да дължина 13 цифри!");
                return;
            }

            int typeNumber = comboBoxType.SelectedIndex;

            string specification = textBoxSpecification.Text;
            if (specification.Length == 0)
            {
                MessageBox.Show("Въведете спецификация!");
                return;
            }

            string weightString = textBoxWeight.Text;
            decimal? weight;
            if (weightString.Length == 0)
            {
                weight = null;
            }
            else
            {
                decimal w;
                if (decimal.TryParse(weightString, out w))
                {
                    if (w < 0)
                    {
                        MessageBox.Show("Въведената стойност за тегло не е валидна!");
                        return;
                    }
                    weight = w;
                }
                else
                {
                    MessageBox.Show("Въведената стойност за тегло не е валидна!");
                    return;
                }
            }

            string quantityString = textBoxQuantity.Text;
            int? quantity;
            if (quantityString.Length == 0)
            {
                quantity = null;
            }
            else
            {
                int q;
                if (int.TryParse(quantityString, out q))
                {
                    if (q < 0)
                    {
                        MessageBox.Show("Въведената стойност за количество не е валидна!");
                        return;
                    }
                    quantity = q;
                }
                else
                {
                    MessageBox.Show("Въведената стойност за количество не е валидна!");
                    return;
                }
            }

            decimal price;
            string priceString = textBoxPrice.Text;
            if (!decimal.TryParse(priceString, out price))
            {
                MessageBox.Show("Въведетената стойност за цена не е валидна!");
                return;
            }
            else
            {
                if (price < 0)
                {
                    MessageBox.Show("Въведетената стойност за цена не е валидна!");
                    return;
                }
            }

            DateTime expDate = expDateTimePicker.Value;

            ShopData.EditProduct(textBoxEnterBarcode.Text, type, typeNumber, newBarcode, specification, weight, quantity, expDate, price);
            MessageBox.Show("Продукта беше променен успешно!");
            ClearForm();
            groupBoxEdit.Enabled = false;
        }

        private void buttonStopEdit_Click(object sender, EventArgs e)
        {
            ClearForm();
            this.groupBoxEdit.Enabled = false;
        }

        private void ClearForm()
        {
            textBoxSpecification.Text = "";
            textBoxPrice.Text = "";
            textBoxBarcode.Text = "";
            textBoxWeight.Text = "";
            expDateTimePicker.Value = DateTime.Now;
            textBoxQuantity.Text = "";
            comboBoxType.SelectedIndex = -1;
            textBoxEnterBarcode.Text = "";
        }

        private void comboBoxType_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (comboBoxType.SelectedIndex < 2)
            {
                textBoxQuantity.Enabled = false;
                textBoxWeight.Enabled = true;
            }
            else
            {
                textBoxWeight.Enabled = false;
                textBoxQuantity.Enabled = true;
            }
        }

        private void buttonClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonStopEdit_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
